home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2006 May / PCWMAY06.iso / Software / Trial / ConceptDraw NetDiagrammer / data1.cab / Samples__Basic / Solutions / OrgChart / drawFunctions.cdb < prev    next >
Text File  |  2006-02-08  |  23KB  |  432 lines

  1. '╨í╨▒╨╛╤Ç ╤ü╤é╨░╤é╨╕╤ü╤é╨╕╨║╨╕ ╨╛ ╤ü╤é╤Ç╤â╨║╤é╤â╤Ç╨╡ ╨╛╤Ç╨│╨░╨╜╨╕╨╖╨░╤å╨╕╨╕, ╨╜╨╡╨╛╨▒╤à╨╛╨┤╨╕╨╝╨╛╨╣ ╨┤╨╗╤Å ╨┐╨╛╤ü╤é╤Ç╨╛╨╡╨╜╨╕╤Å ╤ì╤ä╤ä╨╡╨║╤é╨╜╨╛╨╣ ╨║╨░╤Ç╤é╨╕╨╜╨║╨╕.
  2. Sub GetOrgStatistic()
  3.  
  4.     Dim i As Integer
  5.     Dim bytDirection As Byte
  6.     Dim dblStepHorizontal As Double
  7.     Dim dblStepVertical As Double
  8.     Dim intMaxAlone As Integer
  9.     
  10.     ReDim aiMaxBranches(0) As Integer 
  11.     ReDim aiDirection(0) As Integer 
  12.     aiMaxBranches(0) = 0
  13.     iStatUBound = -1
  14.     bytDirection = conbytAlone
  15.     dblStepHorizontal = condblOneStepX
  16.     dblStepVertical = condblOneStepY
  17.     intMaxAlone = -1
  18.  
  19. '╨á╨╡╨║╤â╤Ç╤ü╨╕╨▓╨╜╨░╤Å ╨┐╤Ç╨╛╤å╨╡╨┤╤â╤Ç╨░. ╨ƒ╨╛╨┤╤ü╤ç╨╕╤é╤ï╨▓╨░╨╡╤é ╨╝╨░╨║╤ü╨╕╨╝╨░╨╗╤î╨╜╨╛╨╡ ╨║╨╛╨╗╨╕╤ç╨╡╤ü╤é╨▓╨╛ ╨┐╨╛╨┤╤ç╨╕╨╜╨╡╨╜╨╜╤ï╤à ╤â ╨╛╨┤╨╜╨╛╨│╨╛ ╤ü╨╛╤é╤Ç╤â╨┤╨╜╨╕╨║╨░
  20. '╨┤╨╗╤Å ╨║╨░╨╢╨┤╨╛╨│╨╛ ╤â╤Ç╨╛╨▓╨╜╤Å ╤ü╨╗╤â╨╢╨╡╨▒╨╜╨╛╨╣ ╨╕╨╡╤Ç╨░╤Ç╤à╨╕╨╕.
  21.     GetBranchStatistic(0, 0)
  22.  
  23. '╨₧╨┐╤Ç╨╡╨┤╨╡╨╗╤Å╨╡╤é, ╨║╨░╨║ ╨▒╤â╨┤╨╡╤é ╤Ç╨░╨╖╨╝╨╡╤ë╨╡╨╜ ╨║╨░╨╢╨┤╤ï╨╣ ╤â╤Ç╨╛╨▓╨╡╨╜╤î ╤ü╤à╨╡╨╝╤ï: ╨┐╨╛ ╨▓╨╡╤Ç╤é╨╕╨║╨░╨╗╨╕ ╨╕╨╗╨╕ ╨│╨╛╤Ç╨╕╨╖╨╛╨╜╤é╨░╨╗╨╕
  24.     For i = 0 To iStatUBound 
  25.         aiDirection(i) = bytDirection
  26.         If intMaxAlone = -1 And aiMaxBranches(i) > 1 Then
  27.              intMaxAlone = i
  28.             bytDirection = conbytHorizontal
  29.         ElseIf intMaxAlone > -1 Then
  30.             If bytDirection = conbytVertical Then
  31.                 bytDirection = conbytHorizontal
  32.             Else
  33.                 bytDirection = conbytVertical
  34.             End If
  35.         End If
  36.     Next
  37.  
  38.     intChartHeight = 0
  39.     intChartWidth = 0
  40.  
  41. '╨á╨╡╨║╤â╤Ç╤ü╨╕╨▓╨╜╨░╤Å ╨┐╤Ç╨╛╤å╨╡╨┤╤â╤Ç╨░, ╨╛╨┐╤Ç╨╡╨┤╨╡╨╗╤Å╨╡╤é ╤Ç╨░╨╖╨╝╨╡╤Ç ╨▓╨╡╤é╨▓╨╕ ╤ü╤à╨╡╨╝╤ï ╨▓ ╨┤╨╛╨║╤â╨╝╨╡╨╜╤é╨╡ ConceptDraw.
  42.     SetBranchSize (0, 0, 0, 0)
  43.                       
  44.     intChartHeight = intChartHeight + condblOneStepY
  45.     intChartWidth = intChartWidth + condblOneStepX
  46. End Sub
  47.  
  48.  
  49. '========================================================================================================================
  50. '========================================================================================================================
  51.  
  52. '╨á╨╡╨║╤â╤Ç╤ü╨╕╨▓╨╜╨░╤Å ╨┐╤Ç╨╛╤å╨╡╨┤╤â╤Ç╨░. ╨ƒ╨╛╨┤╤ü╤ç╨╕╤é╤ï╨▓╨░╨╡╤é ╨╝╨░╨║╤ü╨╕╨╝╨░╨╗╤î╨╜╨╛╨╡ ╨║╨╛╨╗╨╕╤ç╨╡╤ü╤é╨▓╨╛ ╨┐╨╛╨┤╤ç╨╕╨╜╨╡╨╜╨╜╤ï╤à ╤â ╨╛╨┤╨╜╨╛╨│╨╛ ╤ü╨╛╤é╤Ç╤â╨┤╨╜╨╕╨║╨░
  53. '╨┤╨╗╤Å ╨║╨░╨╢╨┤╨╛╨│╨╛ ╤â╤Ç╨╛╨▓╨╜╤Å ╤ü╨╗╤â╨╢╨╡╨▒╨╜╨╛╨╣ ╨╕╨╡╤Ç╨░╤Ç╤à╨╕╨╕. ╨ƒ╨╛╨╝╨╡╤ë╨░╨╡╤é ╤ì╤é╨╛ ╨╖╨╜╨░╤ç╨╡╨╜╨╕╨╡ ╨▓ ╨╝╨░╤ü╤ü╨╕╨▓ aiMaxBranches
  54. '╨ÿ╤ü╤ü╨╗╨╡╨┤╤â╨╡╤é ╨▓╨╡╤é╨▓╤î ╨┤╤Ç╨╡╨▓╨╛╨▓╨╕╨┤╨╜╨╛╨╣ ╤ü╤é╤Ç╤â╨║╤é╤â╤Ç╤ï ╨╜╨░╤ç╨╕╨╜╨░╤Å ╤ü ╨╕╨╜╨┤╨╡╨║╤ü╨░ iPersonStart.
  55. Sub GetBranchStatistic(ByRef iPersonStart As Integer, ByVal intLevel As Integer)
  56.     Dim iNextLevelPerson As Integer
  57.     Dim i As Integer
  58.     
  59.     aiLevel(iPersonStart) = intLevel
  60.     If iStatUBound < intLevel Then
  61.         iStatUBound = intLevel 
  62. '╨ò╤ü╨╗╨╕ ╤Ç╨░╨╖╨╝╨╡╤Ç ╨╝╨░╤ü╤ü╨╕╨▓╨╛╨▓ ╨╝╨╡╨╜╤î╤ê╨╡ ╨║╨╛╨╗╨╕╤ç╨╡╤ü╤é╨▓╨░ ╤â╤Ç╨╛╨▓╨╜╨╡╨╣ ╨▓╨╗╨╛╨╢╨╡╨╜╨╜╨╛╤ü╤é╨╕ ╤ü╤é╤Ç╤â╨║╤é╤â╤Ç╤ï, ╤Ç╨░╨╖╨╝╨╡╤Ç ╨╝╨░╤ü╤ü╨╕╨▓╨╛╨▓ ╤â╨▓╨╡╨╗╨╕╤ç╨╕╨▓╨░╨╡╤é╤ü╤Å.
  63.         ReDim Preserve aiMaxBranches(intLevel) As Integer
  64.         ReDim Preserve aiDirection(intLevel) As Integer
  65.         aiMaxBranches(intLevel) = asSubordCount(iPersonStart)
  66.     ElseIf  aiMaxBranches(intLevel) < asSubordCount(iPersonStart) Then
  67. '╨ò╤ü╨╗╨╕ ╤â ╤ì╤é╨╛╨│╨╛ ╤ü╨╛╤é╤Ç╤â╨┤╨╜╨╕╨║╨░ ╨║╨╛╨╗╨╕╤ç╨╡╤ü╤é╨▓╨╛ ╨┐╨╛╨┤╤ç╨╕╨╜╨╡╨╜╨╜╤ï╤à ╨▒╨╛╨╗╤î╤ê╨╡, ╤ç╨╡╨╝ ╨▓ ╨┐╤Ç╨╛╤ü╨╝╨╛╤é╤Ç╨╡╨╜╨╜╤ï╤à ╨╜╨░ ╤ì╤é╨╛╨╝ ╤â╤Ç╨╛╨▓╨╜╨╡ ╨┐╤Ç╨╡╨╢╨┤╨╡,
  68. '╨╖╨╜╨░╤ç╨╡╨╜╨╕╨╡ ╤ì╨╗╨╡╨╝╨╡╨╜╤é╨░ ╨╝╨░╤ü╤ü╨╕╨▓╨░ aiMaxBranches ╨┤╨╗╤Å ╤ì╤é╨╛╨│╨╛ ╤â╤Ç╨╛╨▓╨╜╤Å ╤â╨▓╨╡╨╗╨╕╤ç╨╕╨▓╨░╨╡╤é╤ü╤Å.
  69.         aiMaxBranches(intLevel) = asSubordCount(iPersonStart) 
  70.     End If
  71.     For i=0 To asSubordCount(iPersonStart)-1
  72. '╨ò╤ü╨╗╨╕ ╨╡╤ü╤é╤î ╨┐╨╛╨┤╨▓╨╡╤é╨▓╨╕, ╤ü╨╜╨╛╨▓╨░ ╨▓╤ï╨╖╤ï╨▓╨░╨╡╤é ╤ü╨╡╨▒╤Å ╨╕ ╨╕╤ü╤ü╨╗╨╡╨┤╤â╨╡╤é ╨▓╨╡╤é╨▓╤î ╨┤╨░╨╗╤î╤ê╨╡.
  73.         GetBranchStatistic(asSubordinates(iPersonStart,i), intLevel + 1)
  74.     Next
  75. End Sub
  76.  
  77.  
  78. '========================================================================================================================
  79. '========================================================================================================================
  80.  
  81. '╨á╨╡╨║╤â╤Ç╤ü╨╕╨▓╨╜╨░╤Å ╨┐╤Ç╨╛╤å╨╡╨┤╤â╤Ç╨░, ╨╛╨┐╤Ç╨╡╨┤╨╡╨╗╤Å╨╡╤é ╤Ç╨░╨╖╨╝╨╡╤Ç ╨▓╨╡╤é╨▓╨╕ ╤ü╤à╨╡╨╝╤ï ╨▓ ╨┤╨╛╨║╤â╨╝╨╡╨╜╤é╨╡ ConceptDraw. 
  82. '╨ò╤ü╨╗╨╕ ╨▓╨╡╤é╨▓╤î ╨┤╨╛╤ü╤é╨░╤é╨╛╤ç╨╜╨╛ ╨▓╨╡╨╗╨╕╨║╨░, ╨╡╨╡ ╨▒╤â╨┤╤â╤é ╤Ç╨░╨╖╨╝╨╡╤ë╨░╤é╤î ╨╜╨░ ╨╛╤é╨┤╨╡╨╗╤î╨╜╨╛╨╣ ╤ü╤é╤Ç╨░╨╜╨╕╤å╨╡ ╨┤╨╛╨║╤â╨╝╨╡╨╜╤é╨░.
  83. Sub SetBranchSize(ByRef iPersonStart As Integer, ByVal intLevel As Integer, ByRef dblReturnX As Double, ByRef dblReturnY As Double)
  84.     Dim iNextPerson As Integer
  85.     Dim dNextLevelX As Double
  86.     Dim dNextLevelY As Double
  87.     Dim i As Integer
  88.     dNextLevelX = 0
  89.     dNextLevelY = 0
  90.     dblReturnX = 0
  91.     dblReturnY = 0
  92.     If asSubordCount(iPersonStart) > 0 Then
  93.         For i=0 To asSubordCount(iPersonStart)-1 
  94.             iNextPerson = asSubordinates(iPersonStart,i) 
  95. '╨Æ╤ï╨╖╨╛╨▓ ╨┐╤Ç╨╛╤å╨╡╨┤╤â╤Ç╤ï ╤Ç╨╡╨║╤â╤Ç╤ü╨╕╨▓╨╜╨╛ ╨┤╨╗╤Å ╨╛╨▒╤è╨╡╨║╤é╨╛╨▓ ╨╜╨╕╨╢╨╜╨╡╨│╨╛ ╤â╤Ç╨╛╨▓╨╜╤Å
  96.             SetBranchSize(iNextPerson, intLevel + 1, dNextLevelX, dNextLevelY)
  97. '╨₧╨┐╤Ç╨╡╨┤╨╡╨╗╨╡╨╜╨╕╨╡ ╤Ç╨░╨╖╨╝╨╡╤Ç╨░ ╤é╨╡╨║╤â╤ë╨╡╨╣ ╨▓╨╡╤é╨▓╨╕ ╨╜╨░ ╨╛╤ü╨╜╨╛╨▓╨░╨╜╨╕╨╕ ╨▓╤ï╤ç╨╕╤ü╨╗╨╡╨╜╨╜╨╛╨╣ ╨╕╨╜╤ä╨╛╤Ç╨╝╨░╤å╨╕╨╕ ╨╛ ╤Ç╨░╨╖╨╝╨╡╤Ç╨╡
  98. '╨▓╨╡╤é╨▓╨╡╨╣ ╨╜╨╕╨╢╨╜╨╡╨│╨╛ ╤â╤Ç╨╛╨▓╨╜╤Å
  99.             Select Case aiDirection(intLevel)
  100.             Case conbytAlone
  101.                 If abNewPage(iNextPerson)  Then
  102.                     dblReturnX = dblReturnX + condblOneStepX
  103.                 Else
  104.                     dblReturnX = dblReturnX + dNextLevelX
  105.                     If dblReturnY < dNextLevelY Then 
  106.                         dblReturnY = dNextLevelY
  107.                     End If
  108.                 End If
  109.             Case conbytVertical
  110.                 dblReturnX = dblReturnX + dNextLevelX
  111.                 If dblReturnY < dNextLevelY Then 
  112.                     dblReturnY = dNextLevelY
  113.                 End If
  114.             Case conbytHorizontal
  115.                 If dblReturnX < dNextLevelX Then 
  116.                     dblReturnX = dNextLevelX
  117.                 End If
  118.                 dblReturnY = dblReturnY + dNextLevelY
  119.             End Select
  120.         Next
  121.             If aiDirection(intLevel) <> conbytAlone Then
  122.                 dblReturnX = dblReturnX + condblOneStepX
  123.             End If
  124.         dblReturnY = dblReturnY + condblOneStepY
  125.     Else
  126.         dblReturnX = condblOneStepX
  127.         dblReturnY = condblOneStepY
  128.     End If
  129.     
  130.     adBranchWidth(iPersonStart) = dblReturnX
  131.     adBranchHeight(iPersonStart) = dblReturnY
  132.     
  133.     If intChartWidth < dblReturnX Then 
  134.         intChartWidth = dblReturnX
  135.     End If
  136.     If intChartHeight < dblReturnY Then 
  137.         intChartHeight = dblReturnY
  138.     End If
  139.     
  140. '╨ƒ╤Ç╨╛╨▓╨╡╤Ç╤Å╨╡╨╝, ╨╜╨╡ ╤ü╨╗╨╡╨┤╤â╨╡╤é ╨╗╨╕ ╨▓╨╡╤é╨▓╤î, ╨╜╨░╤ç╨╕╨╜╨░╤Ä╤ë╤â╤Ä╤ü╤Å ╤ü ╨╛╨▒╤è╨╡╨║╤é╨░ ╤ü ╨╕╨╜╨┤╨╡╨║╤ü╨╛╨╝ iPersonStart, 
  141. '╤Ç╨╕╤ü╨╛╨▓╨░╤é╤î ╨╜╨░ ╨╛╤é╨┤╨╡╨╗╤î╨╜╨╛╨╣ ╤ü╤é╤Ç╨░╨╜╨╕╤å╨╡.
  142.     IsBranchTooLarge(iPersonStart)
  143. End Sub
  144.  
  145.  
  146. '========================================================================================================================
  147. '========================================================================================================================
  148.  
  149. '╨ƒ╤Ç╨╛╨▓╨╡╤Ç╤Å╨╡╨╝, ╨╜╨╡ ╤ü╨╗╨╡╨┤╤â╨╡╤é ╨╗╨╕ ╨▓╨╡╤é╨▓╤î, ╨╜╨░╤ç╨╕╨╜╨░╤Ä╤ë╤â╤Ä╤ü╤Å ╤ü ╨╛╨▒╤è╨╡╨║╤é╨░ ╤ü ╨╕╨╜╨┤╨╡╨║╤ü╨╛╨╝ iPersonStart, 
  150. '╤Ç╨╕╤ü╨╛╨▓╨░╤é╤î ╨╜╨░ ╨╛╤é╨┤╨╡╨╗╤î╨╜╨╛╨╣ ╤ü╤é╤Ç╨░╨╜╨╕╤å╨╡. ╨ò╤ü╨╗╨╕ ╨┤╨░, ╨╕╨╜╤ä╨╛╤Ç╨╝╨░╤å╨╕╤Ä ╨╛╨▒ ╤ì╤é╨╛╨╝ ╨╖╨░╨╜╨╛╤ü╨╕╨╝ ╨▓ ╨╝╨░╤ü╤ü╨╕╨▓ abNewPage.
  151. Sub IsBranchTooLarge(ByRef iPersonStart As Integer)
  152.     If Not bAllOnOnePage Then
  153.         If aiLevel(iPersonStart) > 0 Then '╨┐╤Ç╨╕ ╨┐╤Ç╨╛╨▓╨╡╤Ç╨║╨╡ ╨╜╨╡ ╨▓╤ï╨╣╨┤╨╡╨╝ ╨╖╨░ ╨│╤Ç╨░╨╜╨╕╤å╤ï ╨╝╨░╤ü╤ü╨╕╨▓╨░ aiLevel
  154. '╨┤╨╡╨╣╤ü╤é╨▓╨╕╤é╨╡╨╗╤î╨╜╨╛ ╨╗╨╕ ╤ì╤é╨░ ╨▓╨╡╤é╨▓╤î ╤Å╨▓╨╗╤Å╨╡╤é╤ü╤Å ╨┐╨╡╤Ç╨▓╨╛╨╣ ╨╜╨╡╨╡╨┤╨╕╨╜╤ü╤é╨▓╨╡╨╜╨╜╨╛╨╣ ╨▓╨╡╤é╨▓╤î╤Ä ╤â╤Ç╨╛╨▓╨╜╤Å. ╨ó╨╛╨╗╤î╨║╨╛ ╤é╨░╨║╨░╤Å ╨▓╨╡╤é╨▓╤î 
  155. '╨╝╨╛╨╢╨╡╤é ╨▒╤ï╤é╤î ╨╕╨╖╨╛╨▒╤Ç╨░╨╢╨╡╨╜╨░ ╨╜╨░ ╨╛╤é╨┤╨╡╨╗╤î╨╜╨╛╨╣ ╤ü╤é╤Ç╨░╨╜╨╕╤å╨╡.
  156.                 If aiDirection(aiLevel(iPersonStart)) <> conbytAlone And aiDirection(aiLevel(iPersonStart)-1) = conbytAlone Then
  157.                 If adBranchWidth(iPersonStart) > condblMaxX Or adBranchHeight(iPersonStart) > condblMaxY Or adBranchWidth(iPersonStart) * adBranchHeight(iPersonStart) > condblMaxSquare Then
  158.                     abNewPage(iPersonStart) = True
  159.                 End If                    
  160.             End If
  161.         End If
  162.     End If
  163. End Sub
  164.  
  165. '========================================================================================================================
  166. '========================================================================================================================
  167.  
  168. '╨ƒ╨╛╤ü╤é╤Ç╨╛╨╡╨╜╨╕╨╡ ╤ü╤à╨╡╨╝╤ï ╨▓ ╨┤╨╛╨║╤â╨╝╨╡╨╜╤é╨╡ ConceptDraw
  169. Sub DrawChart()
  170.     Dim intReturnPersonLinkNextPages As Integer    '╨ÿ╨╜╨┤╨╡╨║╤ü ╤ü╨╛╤é╤Ç╤â╨┤╨╜╨╕╨║╨░, ╨╜╨╡╨║╨╛╤é╨╛╤Ç╤ï╨╡ ╨┐╨╛╨┤╤ç╨╕╨╜╨╡╨╜╨╜╤ï╨╡ ╨║╨╛╤é╨╛╤Ç╨╛╨│╨╛ ╨┤╨╛╨╗╨╢╨╜╤ï ╤Ç╨╕╤ü╨╛╨▓╨░╤é╤î╤ü╤Å ╨╜╨░ ╨╛╤é╨┤╨╡╨╗╤î╨╜╨╛╨╣ ╤ü╤é╤Ç╨░╨╜╨╕╤å╨╡
  171.     Dim intFirstPersonOnPage As Integer          '╨ÿ╨╜╨┤╨╡╨║╤ü ╤ü╨╛╤é╤Ç╤â╨┤╨╜╨╕╨║╨░, ╨╜╨░╤ç╨╕╨╜╨░╤Ä╤ë╨╡╨│╨╛ ╨▓╨╡╤é╨▓╤î ╨╜╨░ ╨╜╨╛╨▓╨╛╨╣ ╤ü╤é╤Ç╨░╨╜╨╕╤å╨╡.
  172.     Dim lPagesCounter As Long                     '╨í╤ç╨╡╤é╤ç╨╕╨║ ╨║╨╛╨╗╨╕╤ç╨╡╤ü╤é╨▓╨░ ╤ü╤é╤Ç╨░╨╜╨╕╤å ╨▓ ╨┤╨╛╨║╤â╨╝╨╡╨╜╤é╨╡  
  173.     Dim bReturnPersonLinkNextPages As Boolean      '╨ñ╨╗╨░╨│, ╤â╨║╨░╨╖╤ï╨▓╨░╤Ä╤ë╨╕╨╣, ╤ç╤é╨╛ ╨╜╨╡╨║╨╛╤é╨╛╤Ç╤ï╨╡ ╨┐╨╛╨┤╤ç╨╕╨╜╨╡╨╜╨╜╤ï╨╡ ╤ü╨╛╤é╤Ç╤â╨┤╨╜╨╕╨║╨░ ╨┤╨╛╨╗╨╢╨╜╤ï ╨╜╨░╤ç╨╕╨╜╨░╤é╤î ╨▓╨╡╤é╨▓╤î ╨╜╨░ ╨╛╤é╨┤╨╡╨╗╤î╨╜╨╛╨╣ ╤ü╤é╤Ç╨░╨╜╨╕╤å╨╡
  174.     Dim intLinkToPage As Integer                 '╨¥╨╛╨╝╨╡╤Ç ╤ü╤é╤Ç╨░╨╜╨╕╤å╤ï, ╨╜╨░ ╨║╨╛╤é╨╛╤Ç╤â╤Ä ╨╛╨▒╤è╨╡╨║╤é ╨┤╨╛╨╗╨╢╨╡╨╜ ╨╕╨╝╨╡╤é╤î ╨│╨╕╨┐╨╡╤Ç╨╗╨╕╨╜╨║
  175.     Dim work_lib As Library                    '╨í╤ü╤ï╨╗╨║╨░ ╨╜╨░ ╨╛╤é╨║╤Ç╤ï╤é╤â╤Ä ╨▒╨╕╨▒╨╗╨╕╨╛╤é╨╡╨║╤â, ╤ü╨╛╨┤╨╡╤Ç╨╢╨░╤ë╤â╤Ä ╨╕╤ü╨┐╨╛╨╗╤î╨╖╤â╤Ä╤ë╨╕╨╡╤ü╤Å ╨╛╨▒╤è╨╡╨║╤é╤ï.
  176.     Dim lib_master As Master                '╨í╤ü╤ï╨╗╨║╨░ ╨╜╨░ Master, ╤ü╨╛╨┤╨╡╤Ç╨╢╨░╤ë╨╕╨╣ ╨╕╤ü╨┐╨╛╨╗╤î╨╖╤â╤Ä╤ë╨╕╨╣╤ü╤Å ╨╛╨▒╤è╨╡╨║╤é.
  177.     Dim TitleShape As Shape                    '╨í╤ü╤ï╨╗╨║╨░ ╨╜╨░ ╤ê╤ì╨╣╨┐, ╨╕╨╖╨╛╨▒╤Ç╨░╨╢╨░╤Ä╤ë╨╕╨╣ ╨╖╨░╨│╨╛╨╗╨╛╨▓╨╛╨║ ╤ü╤à╨╡╨╝╤ï
  178.     Dim i As Integer                        '╨æ╨╡╨╖ ╨║╨╛╨╝╨╝╨╡╨╜╤é╨░╤Ç╨╕╨╡╨▓.
  179.     Dim activePage As Page                    '╨ÿ╨╝╤Å ╨┐╨╡╤Ç╨╡╨╝╨╡╨╜╨╜╨╛╨╣ ╨│╨╛╨▓╨╛╤Ç╨╕╤é ╤ü╨░╨╝╨╛ ╨╖╨░ ╤ü╨╡╨▒╤Å.
  180.  
  181.     intLinkToPage = 2
  182.      bReturnPersonLinkNextPages = False
  183.     lPagesCounter = thisDoc.PagesNum()
  184.     
  185. '╨¥╨░╤ü╤é╤Ç╨╛╨╣╨║╨░ ╨┐╨░╤Ç╨░╨╝╨╡╤é╤Ç╨╛╨▓ ╨┤╨╛╨║╤â╨╝╨╡╨╜╤é╨░ ╨┤╨╗╤Å ╨▒╨╛╨╗╨╡╨╡ ╨╜╨░╨│╨╗╤Å╨┤╨╜╨╛╨│╨╛ ╤Ç╨░╨╖╨╝╨╡╤ë╨╡╨╜╨╕╤Å ╤ü╤à╨╡╨╝╤ï.
  186.         For i=lPagesCounter To 2 Step -1
  187.         thisDoc.RemovePage(i) 
  188.     Next 
  189.     lPagesCounter = 1
  190.     activePage=thisDoc.ActivePage
  191.     activePage.RemoveAllShapes
  192.     thisDoc.PageSizeX = intChartWidth
  193.     thisDoc.PageSizeY = intChartHeight
  194.     thisDoc.Scale = 1
  195.     thisDoc.PassThroughGroups = False
  196.     thisDoc.FlowAroundObjects = False
  197.     If (condblOneStepX - condblGroupWidth)/2 > (condblOneStepY - condblGroupHeight)/2 Then
  198.         thisDoc.MinDistToShapes = (condblOneStepY - condblGroupHeight)/2 
  199.     Else
  200.         thisDoc.MinDistToShapes = (condblOneStepX - condblGroupWidth)/2 
  201.     End If
  202.     
  203. '╨₧╤é╨║╤Ç╤ï╨▓╨░╤Ä ╨▒╨╕╨▒╨╗╨╕╨╛╤é╨╡╨║╤â ConceptDraw, ╤ü╨╛╨┤╨╡╤Ç╨╢╨░╤ë╤â╤Ä ╨╕╤ü╨┐╨╛╨╗╤î╨╖╤â╤Ä╤ë╨╕╨╡╤ü╤Å ╨┐╤Ç╨╕ ╨┐╨╛╤ü╤é╤Ç╨╛╨╡╨╜╨╕╨╕ ╤ü╤à╨╡╨╝╤ï ╨╛╨▒╤è╨╡╨║╤é╤ï    
  204.     Set work_lib = thisApp.OpenLib("Orgchart.cdl")
  205.     If Null = work_lib Then
  206.         Msgbox("Ne udalos' otkrit' biblioteku Orgchart.cdl")
  207.     Else
  208. '╨ƒ╤Ç╨╛╨▓╨╡╤Ç╨║╨░ ╨╜╨░╨╗╨╕╤ç╨╕╤Å ╨▓ ╨▒╨╕╨▒╨╗╨╕╨╛╤é╨╡╨║╨╡ ╨▓╤ü╨╡╤à ╨╜╨╡╨╛╨▒╤à╨╛╨┤╨╕╨╝╤ï╤à ╨╛╨▒╤è╨╡╨║╤é╨╛╨▓.
  209. '╨ò╤ü╨╗╨╕ ╨╜╨╡╨╛╨▒╤à╨╛╨┤╨╕╨╝╤ï╨╡ ╨┤╨╗╤Å ╨┐╨╛╤ü╤é╤Ç╨╛╨╡╨╜╨╕╤Å ╨╛╨▒╤è╨╡╨║╤é╤ï ╨╜╨╡ ╨╜╨░╨╣╨┤╨╡╨╜╤ï, ╨▓╤ï╨┐╨╛╨╗╨╜╨╡╨╜╨╕╨╡ ╨╝╨░╨║╤Ç╨╛╤ü╨░ ╨┐╤Ç╨╡╨║╤Ç╨░╤ë╨░╨╡╤é╤ü╤Å.    
  210.         Set lib_master = work_lib.MasterByName("Executive")
  211.         If Null = lib_master Then
  212.             Msgbox("Ob'ekt ""Executive"" ne najden v biblioteke")
  213.             Exit Sub
  214.         End If
  215.         Set lib_master = work_lib.MasterByName("Manager")
  216.         If Null = lib_master Then
  217.             Msgbox("Ob'ekt ""Manager"" ne najden v biblioteke")
  218.             Exit Sub
  219.         End If
  220.         Set lib_master = work_lib.MasterByName("Position")
  221.         If Null = lib_master Then
  222.             Msgbox("Ob'ekt ""Position"" ne najden v biblioteke")
  223.             Exit Sub
  224.         End If
  225.  
  226. '╨ò╤ü╨╗╨╕ ╨╕╨╖╨▓╨╡╤ü╤é╨╜╨╛ ╨╜╨░╨╖╨▓╨░╨╜╨╕╨╡ ╨║╨╛╨╝╨┐╨░╨╜╨╕╨╕, ╨╛╨╜╨╛ ╨▒╤â╨┤╨╡╤é ╨┐╨╛╨╝╨╡╤ë╨╡╨╜╨╛ ╨▓ ╨╖╨░╨│╨╛╨╗╨╛╨▓╨║╨╡ ╨┤╨╛╨║╤â╨╝╨╡╨╜╤é╨░
  227.         If strOrgName <> "" Then
  228.             Set lib_master = work_lib.MasterByName("Title")
  229.             If Null = lib_master Then
  230.                 Msgbox("Ob'ekt ""Title"" ne najden v biblioteke")
  231.             Else            
  232.                 Set TitleShape = thisDoc.Page(1).DropStamp(lib_master.Shape, Int(intChartWidth / 2), Int(condblOneStepY / 2))
  233.                 TitleShape.Shape(TitleShape.ShapesNum()).Text = strOrgName 
  234.             End If
  235.         End If
  236.  
  237.  
  238. '╨á╨╡╨║╤â╤Ç╤ü╨╕╨▓╨╜╨░╤Å ╨┐╤Ç╨╛╤å╨╡╨┤╤â╤Ç╨░. ╨ÿ╨╖╨╛╨▒╤Ç╨░╨╢╨░╨╡╤é ╨▓ ╨┤╨╛╨║╤â╨╝╨╡╨╜╤é╨╡ ╨▓╨╡╤é╨▓╤î ╤ü╤é╤Ç╤â╨║╤é╤â╤Ç╤ï, ╨╜╨░╤ç╨╕╨╜╨░╤Å ╤ü ╨╜╤â╨╗╨╡╨▓╨╛╨│╨╛ ╨╕╨╜╨┤╨╡╨║╤ü╨░.
  239.         DrawBranch(0, 1, -3.1416, -3.1416, Int(adBranchWidth(0) / 2 + condblOneStepX / 2), Int(condblOneStepY / 2), intReturnPersonLinkNextPages, bReturnPersonLinkNextPages, intLinkToPage, work_lib)
  240.          lPagesCounter = lPagesCounter + 1
  241.         
  242. '╨ò╤ü╨╗╨╕ ╤â ╨╛╨▒╤è╨╡╨║╤é╨░ ╨╜╨╡╨║╨╛╤é╨╛╤Ç╤ï╨╡ ╨┐╨╛╨┤╤ç╨╕╨╜╨╡╨╜╨╜╤ï╨╡ ╨┤╨╛╨╗╨╢╨╜╤ï ╨╜╨░╤ç╨░╤é╤î ╨▓╨╡╤é╨▓╤î ╨╜╨░ ╨╛╤é╨┤╨╡╨╗╤î╨╜╨╛╨╣ ╤ü╤é╤Ç╨░╨╜╨╕╤å╨╡, ╨┤╨╗╤Å ╨║╨░╨╢╨┤╨╛╨│╨╛
  243. '╤é╨░╨║╨╛╨│╨╛ ╨┐╨╛╨┤╤ç╨╕╨╜╨╡╨╜╨╜╨╛╨│╨╛ ╨┐╤Ç╨╛╤å╨╡╨┤╤â╤Ç╨░ DrawBranch ╨▒╤â╨┤╨╡╤é ╨▓╤ï╨╖╨▓╨░╨╜╨░ ╨╡╤ë╨╡ ╤Ç╨░╨╖.
  244.         If bReturnPersonLinkNextPages Then
  245.             For i=0 To asSubordCount(intReturnPersonLinkNextPages)-1
  246.                 intFirstPersonOnPage = asSubordinates(intReturnPersonLinkNextPages, i) 
  247.                 If abNewPage(intFirstPersonOnPage) Then 
  248.                     DrawBranch(intFirstPersonOnPage, lPagesCounter , -3.1416, -3.1416, condblOneStepX, Int(condblOneStepY / 2), intReturnPersonLinkNextPages, bReturnPersonLinkNextPages, 1, work_lib)
  249.                     lPagesCounter = lPagesCounter + 1
  250.                 End If
  251.             Next
  252.         End If        
  253.         
  254.     End If
  255.     
  256. End Sub
  257.  
  258.  
  259. '========================================================================================================================
  260. '========================================================================================================================
  261.  
  262. '╨á╨╡╨║╤â╤Ç╤ü╨╕╨▓╨╜╨░╤Å ╨┐╤Ç╨╛╤å╨╡╨┤╤â╤Ç╨░. ╨ÿ╨╖╨╛╨▒╤Ç╨░╨╢╨░╨╡╤é ╨▓ ╨┤╨╛╨║╤â╨╝╨╡╨╜╤é╨╡ ╨▓╨╡╤é╨▓╤î ╤ü╤é╤Ç╤â╨║╤é╤â╤Ç╤ï, ╨╜╨░╤ç╨╕╨╜╨░╤Å ╤ü ╨╛╨▒╤è╨╡╨║╤é╨░ ╤ü ╨╕╨╜╨┤╨╡╨║╤ü╨╛╨╝ intPerson 
  263. Sub DrawBranch(ByRef intPerson As Integer, ByVal lPage As Long, ByVal dblChiefShapeX As Double, ByVal dblChiefShapeY As Double, ByVal dblShapeX As Double, ByVal dblShapeY As Double, ByRef intReturnPersonLinkNextPages As Integer, ByRef bReturnPersonLinkNextPages As Boolean, ByRef intLinkToPage As Integer, ByVal workLib As Library)
  264. 'intPerson - ╨╕╨╜╨┤╨╡╨║╤ü ╤ü╨╛╤é╤Ç╤â╨┤╨╜╨╕╨║╨░ ╨╛╨▒╤è╨╡╨║╤é, ╤ü ╨║╨╛╤é╨╛╤Ç╨╛╨│╨╛ ╨╜╨░╤ç╨╕╨╜╨░╨╡╤é╤ü╤Å ╨▓╨╡╤é╨▓╤î
  265. 'intPerson - ╨╕╨╜╨┤╨╡╨║╤ü ╤ü╤é╤Ç╨░╨╜╨╕╤å╤ï, ╨╜╨░ ╨║╨╛╤é╨╛╤Ç╨╛╨╣ ╨╕╨╖╨╛╨▒╤Ç╨░╨╢╨░╨╡╤é╤ü╤Å ╨▓╨╡╤é╨▓╤î
  266. 'dblChiefShapeX, dblChiefShapeY - ╨║╨╛╨╛╤Ç╨┤╨╕╨╜╨░╤é╤ï ╤ü╨╡╤Ç╨╡╨┤╨╕╨╜╤ï ╤Ç╨╛╨┤╨╕╤é╨╡╨╗╤î╤ü╨║╨╛╨│╨╛ ╨╛╨▒╤è╨╡╨║╤é╨░, ╨╡╤ü╨╗╨╕ ╨╛╨╜╨╕ ╤Ç╨░╨▓╨╜╤ï (-3.1416; -3.1416 ), ╤é╨╛ ╤é╨╡╨║╤â╤ë╨╕╨╣ ╨╛╨▒╤è╨╡╨║╤é ╨╜╨╡ ╨▒╤â╨┤╨╡ ╤ü╨╛╨╡╨┤╨╕╨╜╨╡╨╜ ╨║╨╛╨╜╨╜╨╡╨║╤é╨╛╤Ç╨╛╨╝ ╤ü ╤Ç╨╛╨┤╨╕╤é╨╡╨╗╤î╤ü╨║╨╕╨╝ 
  267. 'dblShapeX, dblShapeY - ╨║╨╛╨╛╤Ç╨┤╨╕╨╜╨░╤é╤ï ╤ü╨╡╤Ç╨╡╨┤╨╕╨╜╤ï ╨╜╨░╤ç╨╕╨╜╨░╤Ä╤ë╨╡╨│╨╛ ╨▓╨╡╤é╨▓╤î ╨╛╨▒╤è╨╡╨║╤é╨░
  268. 'intReturnPersonLinkNextPages - ╨╕╨╜╨┤╨╡╨║╤ü ╤ü╨╛╤é╤Ç╤â╨┤╨╜╨╕╨║╨░, ╨╜╨╡╨║╨╛╤é╨╛╤Ç╤ï╨╡ ╨┐╨╛╨┤╤ç╨╕╨╜╨╡╨╜╨╜╤ï╨╡ ╨║╨╛╤é╨╛╤Ç╨╛╨│╨╛ ╨┤╨╛╨╗╨╢╨╜╤ï ╤Ç╨╕╤ü╨╛╨▓╨░╤é╤î╤ü╤Å ╨╜╨░ ╨╛╤é╨┤╨╡╨╗╤î╨╜╨╛╨╣ ╤ü╤é╤Ç╨░╨╜╨╕╤å╨╡
  269. 'bReturnPersonLinkNextPages - ╤ä╨╗╨░╨│, ╤â╨║╨░╨╖╤ï╨▓╨░╤Ä╤ë╨╕╨╣, ╤ç╤é╨╛ ╨╜╨╡╨║╨╛╤é╨╛╤Ç╤ï╨╡ ╨┐╨╛╨┤╤ç╨╕╨╜╨╡╨╜╨╜╤ï╨╡ ╨╛╨▒╤è╨╡╨║╤é╨░ ╨┤╨╛╨╗╨╢╨╜╤ï ╨╜╨░╤ç╨╕╨╜╨░╤é╤î ╨▓╨╡╤é╨▓╤î ╨╜╨░ ╨╛╤é╨┤╨╡╨╗╤î╨╜╨╛╨╣ ╤ü╤é╤Ç╨░╨╜╨╕╤å╨╡ 'intLinkToPage - ╨╜╨╛╨╝╨╡╤Ç ╤ü╤é╤Ç╨░╨╜╨╕╤å╤ï, ╨╜╨░ ╨║╨╛╤é╨╛╤Ç╤â╤Ä ╨╛╨▒╤è╨╡╨║╤é ╨┤╨╛╨╗╨╢╨╡╨╜ ╨╕╨╝╨╡╤é╤î ╨│╨╕╨┐╨╡╤Ç╨╗╨╕╨╜╨║
  270. 'workLib - ╤ü╤ü╤ï╨╗╨║╨░ ╨╜╨░ ╨╛╨▒╤è╨╡╨║╤é Library, ╨┐╤Ç╨╡╨┤╤ü╤é╨░╨▓╨╗╤Å╤Ä╤ë╨╕╨╣ ╤Ç╨░╨▒╨╛╤ç╤â╤Ä ╨▒╨╕╨▒╨╗╨╕╨╛╤é╨╡╨║╤â
  271.  
  272.     Dim i As Integer
  273. '╨║╨╛╨╛╤Ç╨┤╨╕╨╜╨░╤é╤ï ╨▓ ╨┤╨╛╨║╤â╨╝╨╡╨╜╤é╨╡ ╨┤╨╗╤Å ╤ü╨╗╨╡╨┤╤â╤Ä╤ë╨╡╨│╨╛ ╤ê╤ì╨╣╨┐╨░
  274.     Dim dblNextShapeX As Double
  275.     Dim dblNextShapeY As Double
  276. '╨í╤â╨╝╨╝╨░ ╤Ç╨░╤ü╤ü╤é╨╛╤Å╨╜╨╕╨╣ ╨╝╨╡╨╢╨┤╤â ╤â╨╢╨╡ ╨┐╨╛╤ü╤é╤Ç╨╛╨╡╨╜╨╜╤ï╨╝╨╕ ╨╛╨▒╤è╨╡╨║╤é╨░╨╝╨╕ ╨╛╨┤╨╜╨╛╨│╨╛ ╤â╤Ç╨╛╨▓╨╜╤Å.
  277.     Dim dblSumShapesX As Double
  278.     Dim dblSumShapesY As Double
  279. '╨Ü╨╛╨╛╤Ç╨┤╨╕╨╜╨░╤é╤ï ╨╛╨▒╤è╨╡╨║╤é╨░ ╨┐╤Ç╨╡╨┤╤ü╤é╨░╨▓╨╗╤Å╤Ä╤ë╨╡╨│╨╛ ╨╜╨╡╨┐╨╛╤ü╤Ç╨╡╨┤╤ü╤é╨▓╨╡╨╜╨╜╨╛╨│╨╛ ╨╜╨░╤ç╨░╨╗╤î╨╜╨╕╨║╨░ ╨┤╨╗╤Å ╨┐╨╛╨┤╤ç╨╕╨╜╨╡╨╜╨╜╨╛╨│╨╛ ╤ü╨╗╨╡╨┤╤â╤Ä╤ë╨╡╨│╨╛ ╤â╤Ç╨╛╨▓╨╜╤Å.  '╨ÿ╤ü╨┐╨╛╨╗╤î╨╖╤â╨╡╤é╤ü╤Å ╨┐╤Ç╨╕ ╨┐╨╛╤ü╤é╤Ç╨╛╨╡╨╜╨╕╨╕ ╨║╨╛╨╜╨╜╨╡╨║╤é╨╛╤Ç╨╛╨▓. ╨ö╨╗╤Å ╨╛╨▒╤è╨╡╨║╤é╨░ ╤ü╨░╨╝╨╛╨│╨╛ ╨▓╨╡╤Ç╤à╨╜╨╡╨│╨╛ ╤â╤Ç╨╛╨▓╨╜╤Å ╨╛╨║╨░╨╢╨╡╤é╤ü╤Å ╤Ç╨░╨▓╨╜╤ï╨╝ -1.
  280.     Dim dblForNextLevelChiefX As Double
  281.     Dim dblForNextLevelChiefY As Double
  282. '╨ÿ╨╜╨┤╨╡╨║╤ü ╨┐╨╛╨┤╤ç╨╕╨╜╨╡╨╜╨╜╨╛╨│╨╛ ╤ü╨╛╤é╤Ç╤â╨┤╨╜╨╕╨║╨░, ╨╡╤ü╨╗╨╕ ╤â intPerson ╨╡╤ü╤é╤î ╨┐╨╛╨┤╤ç╨╕╨╜╨╡╨╜╨╜╤ï╨╡
  283.     Dim intNextPerson As Integer
  284. '╨í╤ü╤ï╨╗╨║╨░ ╨╜╨░ ╤Ç╨░╨▒╨╛╤ç╤â╤Ä ╤ü╤é╤Ç╨░╨╜╨╕╤å╤â
  285.     Dim activePage As Page
  286.     
  287.     
  288.     Set activePage = thisDoc.Page(lPage)
  289.     
  290.     If aiLevel(intPerson) > 0 Then
  291. '╨Æ ╤ü╨╗╤â╤ç╨░╨╡ ╨╜╨╡╨╛╨▒╤à╨╛╨┤╨╕╨╝╨╛╤ü╤é╨╕ ╨┤╨╛╨▒╨░╨▓╨╗╤Å╨╡╨╝ ╨▓ ╨┤╨╛╨║╤â╨╝╨╡╨╜╤é ╨╜╨╛╨▓╤â╤Ä ╤ü╤é╤Ç╨░╨╜╨╕╤å╤â
  292.         If intLinkToPage > 1 And abNewPage(intPerson) Then
  293.             thisDoc.AddPage()
  294.         End If
  295. '╨ƒ╨╛╨╝╨╡╤ë╨░╨╡╨╝ ╨╛╨▒╤è╨╡╨║╤é, ╨┐╤Ç╨╡╨┤╤ü╤é╨░╨▓╨╗╤Å╤Ä╤ë╨╕╨╣ ╨╛╨┤╨╜╨╛╨│╨╛ ╤ü╨╛╤é╤Ç╤â╨┤╨╜╨╕╨║╨░
  296.         DrawPersonData(intPerson, activePage, dblShapeX, dblShapeY, intLinkToPage, workLib)
  297.         If intLinkToPage > 1 And abNewPage(intPerson) Then
  298.             intLinkToPage = intLinkToPage + 1
  299.         End If
  300. '╨ò╤ü╨╗╨╕ ╨╜╨░ ╤ì╤é╨╛╨╣ ╤ü╤é╤Ç╨░╨╜╨╕╤å╨╡ ╨╜╨░╤à╨╛╨┤╨╕╤é╤ü╤Å ╨╛╨▒╤è╨╡╨║╤é, ╨┐╤Ç╨╡╨┤╤ü╤é╨░╨▓╨╗╤Å╤Ä╤ë╨╕╨╣ ╨╜╨╡╨┐╨╛╤ü╤Ç╨╡╨┤╤ü╤é╨▓╨╡╨╜╨╜╨╛╨│╨╛ ╨╜╨░╤ç╨░╨╗╤î╨╜╨╕╨║╨░ ╤ü╨╛╤é╤Ç╤â╨┤╨╜╨╕╨║╨░,
  301. '╤ì╤é╨╕ ╨╛╨▒╤è╨╡╨║╤é╤ï ╨▒╤â╨┤╤â╤é ╤ü╨╛╨╡╨┤╨╕╨╜╨╡╨╜╤ï ╨║╨╛╨╜╨╜╨╡╨║╤é╨╛╤Ç╨╛╨╝
  302.         If dblChiefShapeX<>-3.1416 And dblChiefShapeY<>-3.1416 Then
  303.             Select Case aiDirection(aiLevel(intPerson)-1)
  304.             Case conbytAlone 
  305.                 activePage.DrawSmartConnector(dblChiefShapeX, dblChiefShapeY+condblGroupHeight/2, dblShapeX, dblShapeY-condblGroupHeight/2)
  306.             Case conbytVertical 
  307.                 activePage.DrawSmartConnector(dblChiefShapeX+condblGroupWidth/2, dblChiefShapeY, dblShapeX, dblShapeY-condblGroupHeight/2)
  308.             Case conbytHorizontal 
  309.                 activePage.DrawSmartConnector(dblChiefShapeX, dblChiefShapeY+condblGroupHeight/2, dblShapeX-condblGroupWidth/2, dblShapeY)
  310.             End Select
  311.         End If
  312.         dblForNextLevelChiefX = dblShapeX
  313.         dblForNextLevelChiefY = dblShapeY
  314.     Else
  315.         dblForNextLevelChiefX = -3.1416
  316.         dblForNextLevelChiefY = -3.1416
  317.     End If
  318.         
  319. '╨₧╨▒╤Ç╨░╨▒╨╛╤é╨║╨░ ╨┐╨╛╨┤╨▓╨╡╤é╨▓╨╡╨╣, ╨╛╨┐╨╕╤ü╤ï╨▓╨░╤Ä╤ë╨╕╤à ╨┐╨╛╨┤╤ç╨╕╨╜╨╡╨╜╨╜╤ï╤à ╨┤╨░╨╜╨╜╨╛╨│╨╛ ╤ü╨╛╤é╤Ç╤â╨┤╨╜╨╕╨║╨░
  320.     If asSubordCount(intPerson) > 0 Then
  321.         dblSumShapesX = condblOneStepX
  322.         dblSumShapesY = condblOneStepY
  323.         For i = 0 To asSubordCount(intPerson)-1
  324.             intNextPerson = asSubordinates(intPerson,i)
  325.             If abNewPage(intPerson) = False Or intLinkToPage = 1 Then
  326.                 '╨₧╨┐╤Ç╨╡╨┤╨╡╨╗╤Å╨╡╨╝ ╨║╨╛╨╛╤Ç╨┤╨╕╨╜╨░╤é╤ï ╨▓ ╨┤╨╛╨║╤â╨╝╨╡╨╜╤é╨╡ ╨┤╨╗╤Å ╤ê╤ì╨╣╨┐╨╛╨▓, ╨┐╤Ç╨╡╨┤╤ü╤é╨░╨▓╨╗╤Å╤Ä╤ë╨╕╤à ╨┐╨╛╨┤╤ç╨╕╨╜╨╡╨╜╨╜╤ï╤à ╤ü╨╛╤é╤Ç╤â╨┤╨╜╨╕╨║╨░
  327.                 Select Case aiDirection(aiLevel(intPerson))
  328.                 Case conbytAlone
  329.                     If aiDirection(aiLevel(intPerson)+1) = conbytAlone Then
  330.                         dblNextShapeX = dblShapeX
  331.                         dblNextShapeY = dblShapeY + dblSumShapesY
  332.                     Else
  333.                         dblNextShapeX = dblSumShapesX
  334.                         If abNewPage(intNextPerson) Then
  335.                             dblSumShapesX = dblSumShapesX + condblOneStepX
  336.                             intReturnPersonLinkNextPages = intPerson
  337.                             bReturnPersonLinkNextPages = True
  338.                         Else
  339.                             dblSumShapesX = dblSumShapesX + adBranchWidth(intNextPerson)
  340.                         End If
  341.                         dblNextShapeY = dblShapeY + dblSumShapesY
  342.                     End If
  343.                 Case conbytVertical
  344.                     dblNextShapeX = dblShapeX + dblSumShapesX
  345.                     dblSumShapesX = dblSumShapesX + adBranchWidth(intNextPerson)
  346.                     dblNextShapeY = dblShapeY + dblSumShapesY
  347.                 Case conbytHorizontal
  348.                     dblNextShapeX = dblShapeX + dblSumShapesX
  349.                     dblNextShapeY = dblShapeY + dblSumShapesY
  350.                     dblSumShapesY = dblSumShapesY + adBranchHeight(intNextPerson)
  351.                 End Select
  352.                 '╨á╨╡╨║╤â╤Ç╤ü╨╕╨▓╨╜╤ï╨╣ ╨▓╤ï╨╖╨╛╨▓ ╨┐╤Ç╨╛╤å╨╡╨┤╤â╤Ç╤ï ╨┤╨╗╤Å ╨┐╨╛╤ü╤é╤Ç╨╛╨╡╨╜╨╕╤Å ╨▓╨╡╤é╨▓╨╡╨╣ ╤ü╤à╨╡╨╝╤ï ╨┤╨╗╤Å ╨┐╨╛╨┤╤ç╨╕╨╜╨╡╨╜╨╜╤ï╤à ╤ü╨╛╤é╤Ç╤â╨┤╨╜╨╕╨║╨░
  353.                 DrawBranch(intNextPerson, lPage, dblForNextLevelChiefX, dblForNextLevelChiefY, dblNextShapeX, dblNextShapeY, intReturnPersonLinkNextPages, bReturnPersonLinkNextPages, intLinkToPage, workLib)
  354.             End If '╨╡╤ü╨╗╨╕ ╨╜╨╡╤é ╨┐╨╡╤Ç╨╡╤à╨╛╨┤╨░ ╨╜╨░ ╨╜╨╛╨▓╤â╤Ä ╤ü╤é╤Ç╨░╨╜╨╕╤å╤â
  355.         Next i
  356.     End If
  357. End Sub
  358.  
  359.  
  360. '========================================================================================================================
  361. '========================================================================================================================
  362. '╨ö╨╛╨▒╨░╨▓╨╗╨╡╨╜╨╕╨╡ ╨▓ ╨┤╨╛╨║╤â╨╝╨╡╨╜╤é ╤ê╤ì╨╣╨┐╨░, ╨┐╤Ç╨╡╨┤╤ü╤é╨░╨▓╨╗╤Å╤Ä╤ë╨╡╨│╨╛ ╨╛╨┤╨╜╨╛╨│╨╛ ╤ü╨╛╤é╤Ç╤â╨┤╨╜╨╕╨║╨░
  363. Sub DrawPersonData(ByVal intPerson As Integer, ByRef activePage As Page, ByVal dblShapeX As Double, ByVal dblShapeY As Double, ByVal intLinkToPage As Integer, ByVal workLib As Library)
  364.     Dim libMaster As Master        '╨í╤ü╤ï╨╗╨║╨░ ╨╜╨░ Master, ╤ü╨╛╨┤╨╡╤Ç╨╢╨░╤ë╨╕╨╣ ╨╕╤ü╨┐╨╛╨╗╤î╨╖╤â╤Ä╤ë╨╕╨╣╤ü╤Å ╨╛╨▒╤è╨╡╨║╤é.
  365.     Dim docShape As Shape        '╨í╤ü╤ï╨╗╨║╨░ ╨╜╨░ ╤ê╤ì╨╣╨┐ ╨╛╨▒╤è╨╡╨║╤é╨░, ╨┐╨╛╨╝╨╡╤ë╨╡╨╜╨╜╨╛╨│╨╛ ╨▓ ╨┤╨╛╨║╤â╨╝╨╡╨╜╤é.
  366.     Dim lHyperlinkID As Long    'ID ╤ü╨╗╨╡╨┤╤â╤Ä╤ë╨╡╨│╨╛ ╨┤╨╛╨▒╨░╨▓╨╗╨╡╨╜╨╜╨╛╨│╨╛ ╨▓ ╨┤╨╛╨║╤â╨╝╨╡╨╜╤é ╨│╨╕╨┐╨╡╤Ç╨╗╨╕╨║╨░
  367.     Dim strMasterName As String    '╨¥╨░╨╖╨▓╨░╨╜╨╕╨╡ ╨▒╨╕╨▒╨╗╨╕╨╛╤é╨╡╤ç╨╜╨╛╨│╨╛ ╨╛╨▒╤è╨╡╨║╤é╨░, ╨║╨╛╤é╨╛╤Ç╤ï╨╣ ╨▒╤â╨┤╨╡╤é ╨┐╤Ç╨╡╨┤╤ü╤é╨░╨▓╨╗╤Å╤é╤î ╤ü╨╛╤é╤Ç╤â╨┤╨╜╨╕╨║╨░
  368.     Dim textShape As Shape        '╨í╤ü╤ï╨╗╨║╨░ ╨╜╨░ ╤ê╤ì╨╣╨┐, ╨▓ ╨║╨╛╤é╨╛╤Ç╤ï╨╣ ╨▒╤â╨┤╨╡╤é ╨┐╨╛╨╝╨╡╤ë╨╡╨╜ ╤é╨╡╨║╤ü╤é
  369.  
  370.     '╨Æ╤ï╨▒╨╛╤Ç ╨╛╨▒╤è╨╡╨║╤é╨░, ╨║╨╛╤é╨╛╤Ç╤ï╨╣ ╨▒╤â╨┤╨╡╤é ╨╕╨╖╨╛╨▒╤Ç╨░╨╢╨░╤é╤î ╤ü╨╛╤é╤Ç╤â╨┤╨╜╨╕╨║╨░
  371.     If aiLevel(intPerson)=1 Then
  372.         strMasterName = "Executive"
  373.     Else
  374.         If abNewPage(intPerson) Then
  375.             strMasterName = "Manager"
  376.         Else 
  377.             strMasterName = "Position"
  378.         End If
  379.     End If    
  380.     Set libMaster = workLib.MasterByName(strMasterName)
  381.     '╨ƒ╨╛╨╝╨╡╤ë╨╡╨╜╨╕╨╡ ╨▓ ╨┤╨╛╨║╤â╨╝╨╡╨╜╤é ╨▒╨╕╨▒╨╗╨╕╨╛╤é╨╡╤ç╨╜╨╛╨│╨╛ ╨╛╨▒╤è╨╡╨║╤é╨░
  382.     Set docShape = activePage.DrawStamp(libMaster.Shape, dblShapeX-condblGroupWidth/2, dblShapeY-condblGroupHeight/2, dblShapeX+condblGroupWidth/2, dblShapeY+condblGroupHeight/2)
  383.     '╨ƒ╨╛╨╗╤â╤ç╨╡╨╜╨╕╨╡ ╤ü╤ü╤ï╨╗╨║╨╕ ╨╜╨░ ╤ê╤ì╨╣╨┐, ╨▓ ╨║╨╛╤é╨╛╤Ç╤ï╨╣ ╨▒╤â╨┤╨╡╤é ╨┐╨╛╨╝╨╡╤ë╨╡╨╜ ╤é╨╡╨║╤ü╤é. ╨ò╤ü╨╗╨╕ ╨▒╨╕╨▒╨╗╨╕╨╛╤é╨╡╤ç╨╜╤ï╨╣ ╨╛╨▒╤è╨╡╨║╤é
  384.     '╤Å╨▓╨╗╤Å╨╗╤ü╤Å ╨│╤Ç╤â╨┐╨┐╨╛╨╣, ╤é╨╡╨║╤ü╤é ╨▒╤â╨┤╨╡╤é ╨┐╨╛╨╝╨╡╤ë╨╡╨╜ ╨▓ ╨┐╨╛╤ü╨╗╨╡╨┤╨╜╨╕╨╣ (╨▓╨╡╤Ç╤à╨╜╨╕╨╣) child-╨╛╨▒╤è╨╡╨║╤é ╨│╤Ç╤â╨┐╨┐╤ï.
  385.     If docShape.ShapesNum()>0 Then
  386.         Set textShape = docShape.Shape(docShape.ShapesNum())
  387.     Else
  388.         Set textShape = docShape
  389.     End If
  390.  
  391.     textShape.Text = asName(intPerson) & Chr(10) & asPost(intPerson)
  392.     If Not IsEmpty(asEMail(intPerson)) Then
  393.         '╨ƒ╤Ç╨╕╨▓╤Å╨╖╤ï╨▓╨░╤Ä ╨║ ╨│╤Ç╤â╨┐╨┐╨╡ ╤ü╨╕╨╝╨▓╨╛╨╗╨╛╨▓, ╤ü╨╛╤ü╤é╨░╨▓╨╗╤Å╤Ä╤ë╨╕╤à ╨╕╨╝╤Å ╤ü╨╛╤é╤Ç╤â╨┤╨╜╨╕╨║╨░, ╨│╨╕╨┐╨╡╤Ç╨╗╨╕╨╜╨║ ╨╜╨░ ╨╡╨│╨╛ email ╨░╨┤╤Ç╨╡╤ü.
  394.         lHyperlinkID = thisDoc.AddHyperlinkToURL("mailto:" & asEMail(intPerson))
  395.         textShape.SetCharHyperlink(1, Len(asName(intPerson)), lHyperlinkID)
  396.     End If
  397.     '╨ƒ╤Ç╨╕ ╨╜╨╡╨╛╨▒╤à╨╛╨┤╨╕╨╝╨╛╤ü╤é╨╕ ╨▓ ╤ê╤ì╨╣╨┐╨╡ ╨╛╨┐╤Ç╨╡╨┤╨╡╨╗╤Å╨╡╤é╤ü╤Å ╨│╨╕╨┐╨╡╤Ç╨╗╨╕╨╜╨║ ╨╜╨░ ╨┤╤Ç╤â╨│╤â╤Ä ╤ü╤é╤Ç╨░╨╜╨╕╤å╤â ╨┤╨╛╨║╤â╨╝╨╡╨╜╤é╨░. 
  398.     '╨₧╨┐╨╕╤ü╨░╨╜╨╕╨╡ ╨│╨╕╨┐╨╡╤Ç╨╗╨╕╨╜╨║╨░ ╨┤╨╛╨▒╨░╨▓╨╗╤Å╨╡╤é╤ü╤Å ╨▓ ╤ü╨┐╨╕╤ü╨╛╨║ ╨▓╤ü╨╡╤à ╨│╨╕╨┐╨╡╤Ç╨╗╨╕╨╜╨║╨╛╨▓.
  399.     If abNewPage(intPerson) Then 
  400.         lHyperlinkID = thisDoc.AddHyperlinkToPageShape(thisDoc.Page(intLinkToPage).ID)
  401.         docShape.Hyperlink = lHyperlinkID
  402.         docShape.DblClick = 4
  403.     End If
  404.     
  405.     Dim bNewProp As Boolean
  406.     Dim prop As CustomProp
  407.     Dim i As Integer
  408.     Dim j As Integer
  409.     
  410.     For i = 0 To iCustomCount - 1
  411.         bNewProp = true
  412.         For j = 1 To docShape.CustomPropsNum()
  413.             Set prop = docShape.CustomProp(j)
  414.             If StrComp(prop.Label, asCustom(intPerson, i, 0), 1) = 0 Then
  415.                 bNewProp = false
  416.                 Exit For
  417.             End If
  418.         Next j
  419.         If bNewProp Then
  420.             Set prop = docShape.AddCustomProp()
  421.         End If            
  422.         prop.Label    = asCustom(intPerson, i, 0)    
  423.         prop.Prompt        = asCustom(intPerson, i, 0)
  424.         prop.Type        = 0
  425.         prop.Value        = asCustom(intPerson, i, 1)
  426.         prop.Invisible    = FALSE
  427.         prop.Verify        = TRUE
  428.     Next i
  429.     
  430. End Sub
  431.  
  432.